/**
  * Author: Mei
  * Date: 2020-11-22 14:16
  * Description: 
  *
  */
#include <iostream>
#include <thread>
#include <unistd.h>

using namespace std;

class bad{
public:
    bad(int* i) : data(i){
        cout << "addr2:" << data << endl;
    }
    void operator()(){
        for(unsigned j = 0; j < 50; ++j){
            something(data);
        }
    }
private:
    void something(int* i){
        *i = 100;
        cout << *i << endl;
    };
    int* data;
};
/**
 * 为什么detach在线程里，使用了在3处delete的内存还不报错误？？？
 * 线程还没来得及执行，main函数就执行完了，直接杀死还没有执行完的线程，
 * 所以线程里使用了已经delete的内存，也没有出错。
 * 如果在main函数里调用sleep(2)，就会出错误。
如果当main函数结束后，还不想结束其他由main函数创建的子线程，
 就必须调用下pthread_exit(NULL)。
 *
 *
 */
void func(){
    int* local = new int(10);
    cout << "addr1:" << local << endl;
    bad b(local);
    delete local;
    thread t(b);
    //cout << "before join " << *local << endl;
    cout << "end delete" << endl;
    t.detach();
    //t.join();

    cout << "after join " << *local << endl;
    cout << local << endl;
    cout << "func end" << endl;
}
int main(){
    func();
    //sleep(1);
    pthread_exit(NULL);
    cout << "end" << endl;
}